package borrador;

import java.util.LinkedList;
import java.util.List;

import logica.Diagrama;
import logica.Entidad;
import logica.EntidadRepetidaException;
import logica.IdExternoInexistenteException;
import logica.Jerarquia;
import logica.JerarquiaException;
import logica.Proyecto;
import logica.SinNombreException;
import logica.TipoDeEntidad;

/* para probar la edición de una jerarquia */

public class AlertaJerarquia {
	
	private Proyecto proyecto;
	
	private Entidad entidadAlerta;
	private Entidad entidadAlertaPorTiempo;
	private Entidad entidadAlertaPorDocumento;
	
	private Entidad entidadAuxiliar1;
	private Entidad entidadAuxiliar2;
	private Entidad entidadAuxiliar3;
	
	private Entidad entidadSoyIgual;

	
	private Jerarquia jerarquiaAlertaCondicion;
	
	public AlertaJerarquia() throws SinNombreException, JerarquiaException, EntidadRepetidaException, IdExternoInexistenteException
	{
		crearEntidadAlerta();
		crearEntidadAlertaPorTiempo();
		crearEntidadAlertaPorDocumento();
		crearJerarquiaCondicion();
		
		crearEntidadesAuxiliares();
		
		crearProyecto();
	}
	
	public Proyecto getProyecto() {
		return proyecto;
	}
	
	public Entidad getEntidadAuxiliar1() {
		return entidadAuxiliar1;
	}

	public Entidad getEntidadAuxiliar2() {
		return entidadAuxiliar2;
	}

	public Entidad getEntidadAuxiliar3() {
		return entidadAuxiliar3;
	}

	public Entidad getEntidadSoyIgual() {
		return entidadSoyIgual;
	}
	
	public Entidad getEntidadAlerta() {
		return entidadAlerta;
	}

	public Entidad getEntidadAlertaPorTiempo() {
		return entidadAlertaPorTiempo;
	}
	
	public Entidad getEntidadAlertaPorDocumento() {
		return entidadAlertaPorDocumento;
	}
	
	public Jerarquia getJerarquiaAlertaCondicion() {
		return jerarquiaAlertaCondicion;
	}
	
	private void crearEntidadesAuxiliares() throws SinNombreException 
	{
		entidadAuxiliar1 = new Entidad("auxiliar1");
		entidadAuxiliar1.setTipo(TipoDeEntidad.PROGRAMADA);
		
		entidadAuxiliar2 = new Entidad("auxiliar2");
		entidadAuxiliar2.setTipo(TipoDeEntidad.PROGRAMADA);
		
		entidadAuxiliar3 = new Entidad("auxiliar3");
		entidadAuxiliar3.setTipo(TipoDeEntidad.PROGRAMADA);
		
		entidadSoyIgual = new Entidad("estoy repetida");
		entidadSoyIgual.setTipo(TipoDeEntidad.HISTORICA);
	}
	
	private void crearEntidadAlertaPorTiempo() throws SinNombreException
	{
		entidadAlertaPorTiempo = new Entidad("Por tiempo");
		entidadAlertaPorTiempo.setTipo(TipoDeEntidad.COSA);
	}

	private void crearEntidadAlertaPorDocumento() throws SinNombreException
	{
		entidadAlertaPorDocumento = new Entidad("Por documento");
		entidadAlertaPorDocumento.setTipo(TipoDeEntidad.COSA);		
	}

	private void crearEntidadAlerta() throws SinNombreException
	{
		entidadAlerta = new Entidad("Alerta");
		entidadAlerta.setTipo(TipoDeEntidad.COSA);		
	}
	
	private void crearJerarquiaCondicion() throws JerarquiaException, SinNombreException
	{
		List<Entidad> hijas = new LinkedList<>();
		
		hijas.add(entidadAlertaPorDocumento);
		hijas.add(entidadAlertaPorTiempo);
		
		jerarquiaAlertaCondicion = new Jerarquia("condición", entidadAlerta, hijas);
	}

	private void crearProyecto() throws SinNombreException, EntidadRepetidaException, IdExternoInexistenteException
	{
		Diagrama diagramaPpal, diagramaHijo1, diagramaOtro;
		
		proyecto = new Proyecto("proyecto-alerta-jerarquia");
		
		diagramaPpal= proyecto.getDiagramaPpal();
		
		diagramaPpal.agregarObjetoDiagrama(entidadAlerta);
		diagramaPpal.agregarObjetoDiagrama(entidadAlertaPorDocumento);
		diagramaPpal.agregarObjetoDiagrama(entidadAlertaPorTiempo);
		diagramaPpal.agregarObjetoDiagrama(entidadAuxiliar1);
		diagramaPpal.agregarObjetoDiagrama(jerarquiaAlertaCondicion);
		
		diagramaPpal.agregarObjetoDiagrama(entidadSoyIgual);
		
		diagramaHijo1 = diagramaPpal.crearDiagramaHijo("hijo1");
		
		diagramaHijo1.agregarObjetoDiagrama(entidadAuxiliar2);
		
		diagramaOtro = diagramaPpal.crearDiagramaHijo("otro hijo");
		
		diagramaOtro.agregarObjetoDiagrama(entidadAuxiliar3);
	}
}
